/*
 * Projekt: GMU 2013 - Canny hranovy detektor OpenCL/CUDA
 * Autori: Pavel Nevrala - xnevra00 (xnevra00@stud.fit.vutbr.cz)
 *         Martin Jurak - xjurak02 (xjurak02@stud.fit.vutbr.cz)
 */
#pragma once

#include <CL/opencl.h>
#include "Errors.h"
/*
 * class CannyPartsBase
 * Bazova trida pro jednotlive casti Cannyho detectoru implementovaneho v OpenCL.
 * Obsahuje spravu chybovych hlaseni pro OpenCL. Uchovava zpracovany obraz pro dalsi krok Cannyho detektoru.
 */
class CannyPartsBase
{
public:
	CannyPartsBase(cl_uint maxWorkGroupP);	//deklarace konstruktoru
	~CannyPartsBase(void);					//deklarace destruktoru

	/*
	 * Virtualni metoda pro provedeni dane casti
	 * @image - vstupni obraz
	 * @width - sirka obrazu
	 * @height - vyska obrazu	 
	 */
	virtual double run(cl_float *image, cl_uint width, cl_uint height) = 0;

	/*
	 * Vraci zpracovany vystupni obraz 
	 * @return - vystupni obraz	 
	 */
	cl_float *getOutImage(){return outImage;};

protected:
	Errors errorController;	//sprava vyjimek
	cl_float *outImage;		//vystupni obraz
	cl_ulong time_start, time_end;//zacatek,konec cas behu programu
	double total_time;	//celkovy cas behu programu
	cl_uint maxWorkGroup;//maximalni WorkGroup size
};

